package cn.edu.sdjzu.knoverse.service;

import cn.edu.sdjzu.knoverse.model.dto.graph.GraphDTO;
import java.util.Map;
import java.util.List;

public interface GraphQueryService {
    
    /**
     * 获取指定节点及其邻接节点的图
     * @param nodeId 节点ID
     * @return 包含指定节点及其邻居的图数据
     */
    GraphDTO getNodeWithNeighbors(Long nodeId);
    
    /**
     * 根据类型和关键词搜索相关节点及其子图
     * @param type 节点类型
     * @param keyword 关键词
     * @return 包含匹配节点及其邻居节点的图数据
     */
    GraphDTO getSubgraph(String type, String keyword);

    /**
     * 获取节点所有属性
     * @param nodeId 节点ID
     * @return 节点的所有属性，以Map形式返回
     */
    Map<String, Object> getNodeProperties(Long nodeId);
    
    /**
     * 获取所有节点和关系
     * @return 包含所有节点和关系的图数据
     */
    GraphDTO getAllNodesAndRelationships();
    
    /**
     * 获取所有课程和前置课程关系，用于图的初始化
     * @return 包含所有课程节点和前置课程关系的图数据
     */
    GraphDTO getCoursesWithPreCourseRelationships();
    
    /**
     * 获取所有BaseNode节点的非BaseNode标签类型
     * @return 所有非BaseNode的标签类型列表
     */
    List<String> getAllNodeTypes();
} 